home *** CD-ROM | disk | FTP | other *** search
-
- /*
- File: QDGXMovieLibrary.c
-
- Contains: graphics libraries - GX movies
-
- Written by: Mike Reed
-
- Copyright: © 1995 by Apple Computer, Inc., all rights reserved.
-
- Change History (most recent first):
-
- <2> 5/4/95 JD changing DisposHandle to DisposeHandle
- <1> 5/2/95 jtd First checked in.
-
- */
-
- #include <QuickDraw.h>
- #include <QDOffscreen.h>
- #include <Memory.h>
- #include <Movies.h>
- #include <MoviesFormat.h>
- #include <ImageCompression.h>
- #include <GXMath.h>
- #include <DecompressShapeLibrary.h>
- #include <QDGXMovieLibrary.h>
-
- #ifdef debugging
- #define CheckOSErr(err) if (err) DebugStr("\pOS error"); else
- #else
- #define CheckOSErr(err)
- #endif
-
- void InitializeQDGXRecorder(QDGXRecorder *mr, const FSSpec* spec, Fixed width, Fixed height)
- {
- OSErr err;
-
- EnterMovies(); // This can be nested with other calls to EnterMovies()
-
- mr->description = (ImageDescriptionHandle)NewHandleClear(sizeof(ImageDescription));
-
- if (mr->description == nil)
- return;
-
- { ImageDescriptionPtr descPtr;
-
- descPtr = *mr->description;
- descPtr->idSize = sizeof(ImageDescription);
- descPtr->cType = 'qdgx';
- descPtr->vendor = 'appl';
- descPtr->temporalQuality = codecLosslessQuality;
- descPtr->width = FixedRound(width);
- descPtr->height = FixedRound(height);
- descPtr->hRes = descPtr->vRes = ff(72);
- descPtr->dataSize = 0;
- descPtr->frameCount = 1;
- descPtr->depth = 32;
- descPtr->clutID = -1;
- }
-
- mr->movieDataSpec = *spec;
- err = CreateMovieFile(&mr->movieDataSpec, 'TVOD', 0, createMovieFileDeleteCurFile,
- &mr->resourceRefNum, &mr->movie);
- CheckOSErr(err);
-
- mr->track = NewMovieTrack(mr->movie, width, height, 0);
- mr->media = NewTrackMedia(mr->track, VideoMediaType, 600, 0, 0);
-
- BeginMediaEdits(mr->media);
- }
-
- void AddQDGXRecorderFrame(QDGXRecorder *mr, gxShape source, long duration, Boolean eraseBackground)
- {
- OSErr err;
- Handle shapeH;
-
- shapeH = CreateQDGXStream(source, nil, false, eraseBackground);
- if (shapeH)
- { err = AddMediaSample(mr->media, shapeH, 0, GetHandleSize(shapeH),
- duration, (SampleDescriptionHandle)mr->description, 1, 0, nil);
- CheckOSErr(err);
- DisposeHandle(shapeH);
- }
- }
-
- void TerminateQDGXRecorder(QDGXRecorder *mr)
- {
- OSErr err;
-
- err = EndMediaEdits(mr->media);
- CheckOSErr(err);
- err = InsertMediaIntoTrack(mr->track, 0, 0, GetMediaDuration(mr->media), fixed1);
- CheckOSErr(err);
-
- err = AddMovieResource(mr->movie, mr->resourceRefNum, 0, 0);
- CheckOSErr(err);
- err = CloseMovieFile(mr->resourceRefNum);
- CheckOSErr(err);
-
- DisposeMovie(mr->movie);
-
- ExitMovies();
- }
-
-